package org.wells.dlock;

import java.util.concurrent.TimeUnit;

/**
 * 分布式锁接口
 * @author HuangSiwei
 * @date 2020/01/21
 */
public interface IDLock {

	/**
	 * 获得锁
	 *
	 */
	void lock();

	/**
	 * 获取微粒锁 。<br>
	 * 常见的：按单锁，按用户锁，按产品锁
	 *
	 * @param particle 微粒。如：订单号、用户id，产品id。注：请不要包含特殊字符：/
	 */
	IDLock getParticleLock(String particle);

	/***
	 * 尝试获取锁。如果不能立即获取锁，立刻放回false。
	 *
	 * @return 是否成功获取锁
	 */
	boolean tryLock();
	

	boolean tryLock(long time, TimeUnit unit);

	/**
	 * 释放锁
	 */
	void unlock() ;

}
